Data access

ABSTRACT

A data access system includes proxy servers for caching “local” copies of selected data sets stored on data servers to which users request access. Each proxy server is adapted to generate a subscription request message in respect of each identified cached data set for submission to a conventional “publish &amp; subscribe” data distribution system. The data distribution system is arranged with access to “published” updates to data sets, made available from respective data servers. Upon receipt of a published updated data set having an identifier matching that in an earlier-received subscription request, the data distribution system forwards the data set to the subscribing proxy server to enable update to the respective cached copy. Thus, a proxy server, having decided to cache a particular data set, need only issue a subscription request message in order to receive all subsequent updates, as they become available, until choosing to remove the data set from the cache.

This application is the US national phase of international applicationPCT/GBO1/00934 filed 5 Mar. 2001 which designated the U.S.

BACKGROUND OF THE INVENTION

1. Field of the Invention

This invention relates to data access and in particular to maintainingintegrity of cached copies of data.

2. Related Art

The use of proxy servers to cache frequently accessed data sets is wellknown. Proxy servers may be provided to service a “local” community ofusers, storing (caching) local copies of frequently requested data setsthat would otherwise need to be retrieved from their respectiveoriginating data sources every time a user requested access to them.Once a proxy server has stored a local copy of a particular data set, asubsequent request for access by a user to that data set is interceptedby the proxy server and access provided rapidly to the locally cachedcopy rather than to the originating source specified in the request.

A proxy server may include features to monitor user access requests andto select data sets for caching according to a predetermined selectionalgorithm. For example, a data set may be selected for caching if accessto it was requested from three or more different users over apredetermined time period. A cached data set may be deleted from thecache if the time period between consecutive access requests exceeds apredetermined threshold.

A proxy server must ensure that any cached data sets remain up-to-datewith respect to changes to the “original” data set held at theoriginating data source. To achieve this, known proxy servers use one ormore of the following techniques:

-   (1) Periodic checking— once a data set has been cached, the proxy    server submits periodic requests for access to the original source    of the data set to determine whether amendments have been made.    However, if the proxy server is to keep up to date with many cached    data sets, a great deal of proxy server processing time and    communications bandwidth is consumed if the period between requests    is to be kept sufficiently short in order to avoid serving    out-of-date data sets to users.-   (2) Patterns associated with data being updated— the proxy server    looks for patterns in the update of a data set and attempt to    predict when it will next be amended. For example, if a data set has    consistently been updated each morning at 6 am (e.g. a newspaper),    then the proxy server may download a new copy of the data set from    the corresponding source at say 6.01 every morning. However, it is    not possible to be 100% accurate in predicting when a data set will    be updated.-   (3) Specified expiry time— a data set provider tags the data set    with a ‘will be valid until . . . ’ message. The proxy server will    not seek to refresh the cached copy until after that time. However,    timely refresh of the cached copy depends upon the clocks between    the proxy and data source being reasonably well aligned and upon the    data set not expiring early. In practice short expiry periods are    used, e.g. 1 hour.-   (4) Update queries triggered by user access requests—every time a    proxy server receives a request for access to a cached data set, the    proxy server sends a message to the corresponding source of that    data set asking “Has this data set been updated since xxxx”, where    xxxx is a time or date. If it has, then a copy of the new data set    is downloaded to the cache. While this is one of the most common    modes of operation of proxy servers, it may add considerable time    delay to the servicing of a request for access, and consumption of    communications bandwidth in submitting an update query every time.    This dramatically decreases the Quality of Service available to    broadband users who expect far more rapid access to requested data    sets.

BRIEF SUMMARY

Aspects of the present invention are as set out in the claims,individually or in combinations thereof.

Embodiments of the present invention can be used to provide, to a groupof user interfaces, access to files which are cached locally but whichare each automatically updated as soon as an update becomes available ata source file server. This is facilitated by using a publish andsubscribe system to update the cached files. The publish and subscribesystem in turn can be fed updates to the individual files by a sourcefile server which is adapted to detect file updates and then use “pushtechnology” to send the updates to the publish and subscribe system.

In at least a first aspect of the present invention, it is not necessaryfor a proxy (or caching) server to actively validate then update cacheddata sets once a decision has been made to cache a particular data set.Instead, the proxy server generates a subscription request message forsending to a predetermined node of a known “publish & subscribe” datadistribution system, requesting receipt of any new “published” versionof the particular identified data set. The data distribution system isarranged with access to published updates to data sets fromcorresponding data sources. If the data distribution system receives adata set having the same identifier as one subscribed to, the data setwill be propagated through the data distribution system and delivered tothe subscribing proxy server. On receipt, the proxy server overwritesthe existing cached copy of the data set with the newly deliveredversion.

If a proxy server deletes a data set from its cache, the proxy server isarranged to generate an “unsubscribe” message for sending to the datadistribution system to ensure that further updates to the data set areno longer delivered.

Preferably, data sources may be arranged to “publish” to the datadistribution system a copy of each data set that is changed at thatsource. If the data distribution system has received a subscriptionrequest from a proxy server in respect of a changed data set receivedfrom a source, then the data distribution system delivers the changeddata set to the subscribing proxy server. Preferably, a changemonitoring process may be implemented at data sources to monitor changesto files and to “push” a copy of each changed file to a predeterminedpoint of entry to the data distribution system. Any changed file that isnot the subject of a subscription by a proxy server will not bepropagated further by the data distribution system.

A “data set” or a “file”, in the context of the present invention, mightin practice be any of several different types of electronicallytransmittable entities such as those accessible over the Internet,including for instance text, graphics, spreadsheets, computerprogrammes, audio, video, multimedia, or data. It should also be notedthat a “user” may in practice be non-human, such as a machine or a pieceof software.

BRIEF DESCRIPTION OF THE DRAWINGS

There now follows, by way of example only, a description of a specificembodiment of the present invention. This description is to be read inconjunction with the accompanying drawing, in which:

FIG. 1 shows a block diagram of a data access system according to apreferred embodiment of the present invention; and

FIG. 2 shows a block diagram of a caching server for use in the dataaccess system of FIG. 1.

DETAILED DESCRIPTION OF EXEMPLARY EMBODIMENTS

Referring to FIG. 1, a diagram is provided showing in schematic form adata access system according to a preferred embodiment of the presentinvention. Two proxy servers 100 are shown arranged with access toforwarding computers 105 of a “publish & subscribe” data distributionsystem 110 comprising, in this example, a simple hierarchy of forwardingcomputers 105 (FC-1 to FC-6). Servers 115 representing sources of datasets are also shown arranged with access to forwarding computers 105 ofthe data distribution system 110.

Referring to FIG. 2, a proxy (or caching) server 100 includes: a useraccess request monitor 120 for intercepting and monitoring messages sentby client devices 200 containing requests for access to data sets storedon data servers 115; a cache (store) 125; and a data set selector 130for selecting data sets for storage in the cache 125 according to apredetermined selection algorithm. A proxy server 100 also includes asubscription message generator 135 for generating and sending messagesto the data distribution system 110 to subscribe on behalf of the proxyserver to receive updates to specified data sets.

The subscription message generator 135 is arranged to generatesubscription messages in a format acceptable to the data distributionsystem 110. A subscription message includes an address for thesubscribing proxy server 100, an indication of whether the message is a“subscribe” or “unsubscribe” request message and a unique identifier forthe data set for which updates are/were sought. Preferably, the data setselector 130 may be adapted to signal to the subscription messagegenerator 135 the unique data set identifier of a data set for which adecision has been made to store a copy in the cache 125 and anindication that a “subscription” request message is to be generated.Similarly, upon deciding to remove a data set from the cache 125, thedata set selector 130 may signal to the subscription message generator135 to generate an “unsubscribe” message in respect of that data set.

In operation, proxy server 100, by means of the user access requestmonitor 120, intercepts a user's message requesting access to a data setstored on a specified data server 115. If the requested data set isstored in the cache 125, then the proxy server 100 services the accessrequest by providing access to the cached copy of the requested dataset, trapping the user's access request message. If the requested dataset is not stored in the cache 125, then the user's access requestmessage is forwarded to the specified data server 115 over aconventional communications network (not shown in FIG. 1). The user'saccess request is also copied to the data set selector 130 to determinewhether or not a copy of the requested data set should be stored in thecache 125. Such a storage decision may be made for example for thebenefit of providing faster subsequent user access to that data set. Aconventional selection algorithm may be implemented by the data setselector 130, for example implementing selection criteria listed abovein the introductory part of the present patent application.

If the data set selector 130 chooses to store the requested data set inthe cache 125, proxy server 100 may be arranged to intercept a responsefrom the specified data server 115 to the corresponding user's accessrequest message and to copy the data set supplied in the response to thecache 125, thereafter forwarding the response to the client device forthe requesting user. On selecting the data set for storage in the cache125, the data set selector 130 is arranged to trigger the subscriptionmessage generator 135 to generate a subscription request message,supplying to the subscription message generator 135 a unique identifierfor the selected data set for inclusion in the subscription requestmessage, and to send the generated message to the “publish & subscribe”data distribution system 110, preferably to a predetermined forwardingcomputer 105 of that system.

On receipt of a subscription request message, the data distributionsystem 110 registers the request in a conventional way to ensure that asubsequently received data set having the identifier specified in thesubscription request will be forwarded and delivered by forwardingcomputers 105 of the system to one or more subscribing proxy servers100.

In order for updates to data sets stored on data servers 115 to be madeavailable to the data distribution system 110 for delivery tosubscribing proxy servers 100, a simple update monitoring module 140 maybe installed on each data server 115 to detect changes to data setsstored in a store 145 and to “publish” each changed data set byforwarding a copy of the data set to a predetermined forwarding computer105 in the data distribution system 110. An update monitoring module 140may be implemented in the form of a computer program for installation ona conventional data server. An example of a listing for such a computerprogram is attached to the present patent application as Annex A. Acomputer program such as that in Annex A would be suitable forinstallation and integration into a conventional data server formonitoring directories of files in the data server store 145 and forsending a copy of each file in which a change is detected to apredetermined destination.

On receipt of an updated copy of a cached data set, proxy server 100 isarranged to store the updated copy in the cache 125, overwriting thepreviously stored copy.

Of course, updates to data sets stored on data servers 115 may be madeavailable by third party sources and “published” to the datadistribution system 110 for delivery to subscribing proxy servers 100.

The preferred embodiment of the present invention as described above maybe implemented to operate in the context of the Internet and World-wideWeb. A conventional web proxy server, such as the ‘Squid’ server (or‘Cuttlefish’ derivative), may be adapted to receive and install asubscription message generation module 135 and to enable updates tocached data sets to be written to the cache 125 upon receipt. A skilledperson would be readily able to implement proxy server features of thepresent invention on a conventional proxy server.

The present invention may also be applied to Wireless ApplicationProtocol (WAP) proxy servers. WAP proxy servers operate in a similar wayto web servers employing the Hypertext Transfer Protocol (HTTP) toaccess data sets.

ANNEX A From win32 declarations module 'Windows 32API function calldefinitions & Constant Declarations Option Explicit 'ConstantDeclarations Public Const INFINITE = &HFFFF Public Const WAIT_OBJECT =&H0 Public Const WAIT_ABANDONED = &H80 Public Const WAIT_TIMEOUT = &H102'File Change Notification Flag in this instance set just to monitorchanges to last file write 'time Public ConstFILE_NOTIFY_CHANGE_LAST_(—) WRITE As Long = &H10 'API InterfaceDeclarations Public Declare Function FindFirstChangeNotification Lib“kernel32” _(—)   Alias “FindFirstChangeNotificationA” _(—)  (ByVallpPathName As String, _(—)   ByVal bWatchSubtree As Long, _(—)   ByValdwNotifyFilter As Long) As Long Public Declare FunctionFindCloseChangeNotification Lib “kernel32” _(—)  (ByVal hChangeHandle AsLong) As Long Public Declare Function FindNextChangeNotification Lib“kernel32” _(—)  (ByVal hChangeHandle As Long) As Long Public DeclareFunction WaitForMultipleObjects Lib “kernel32” _(—)  (ByVal nCount AsLong, _(—)   lpHandles As Long, _(—)   ByVal bWaitAll As Long, _(—)  ByVal dwMilliseconds As Long) As Long From main module 'Set optionexplicit so all variables used must be pre-declared Option Explicit'Declare Global Variables Dim hChangeHandle As Long Dim hWatched( ) AsLong Dim TerminateFlag As Long Private Sub Form_Load( )   Dim fso,FilesCollection, RootFolder, File, newdate, changedfile   DimcIniReturn, TerminateFlag As Boolean   Dim i As Integer   DimWatchStatus As Long   Dim WatchPath As String   Dim cIniData As String  Dim FolderArray( ) As String  'CDS_CIni is a class module for parsingmi files   Dim cIni As New CDS_CIni   WatchPath = “C:\InetPub\wwwroot\”'Root path of watched   directory tree   TerminateFlag = False  'Findall directories under the WatchPath and write to folder array  FolderArray = FindDirectories(WatchPath)  'Add root watch path to endof watched directory array   ReDim PreserveFolderArray(UBound(FolderArraY) + 1)   FolderArray(UBound(FolderArray))= WatchPath   ReDim hWatched(UBound(FolderArray))  'Create a watcheddirectory tree & show list of watched folders   Set fso =CreateObject(“Scripting.FileSystemObject”)  'Set reference ini file name  cIni.FileName = App.Path & “\data.ini”  For i = 0 ToUBound(FolderArray)  hWatched(i) =WatchCreate(FolderArray(i),FILE_NOTIFY_(—)  CHANGE_LAST_WRITE)   Set RootFolder =fso.GetFolder(FolderArray(i))   Set FilesCollection = RootFolder.Files 'write last modified time & file path to ini file under file path keyfor  each file  'syntax is clniWriteValue( ini file key name, fieldname, value)  'where key name is the ini file key for rapid relocationof record in file  'field is the field name for that key and value isthe value to write to  the file   For Each File In FilesCollection   cIni.WriteValue FolderArray(i) & “\” & File.Name, “Lastwrite”,File.DateLastModified    cIni.WriteValue FolderArray(i) & “\” &File.Name, “FilePath”, FolderArray(i) & “\” &    _File.Name   Next  Next 'Setup wait state ready for change   WatchStatus =WatchDirectory(UBound(hWatched) + 1, hWatched, 100)  '(perform actions)for first detected change  Set RootFolder =fso.GetFolder(FolderArray(WatchStatus))  Set FilesCollection =RootFolder.Files  For Each File In FilesCollection   'check current filelast modified date against stored date to find   changed file  cIniReturn = cIni.ReadValue(FolderArray(WatchStatus) & “\” &File.Name, _(—)   “Lastwrite”, cIniData)   If cIniData <>File.DateLastModified Then    newdate = cIniData   'Modified File hasbeen found store path & open socket    cIniReturn =cIni.ReadValue(FolderArray(WatchStatus) & “\” & File .Name, _(—)   “FilePath”, cIniData)    changedfile = cIniData    sckConnect.Connect  'code will then jump to connect event and send data of changed   fileto beacon    sckConnect Close   End If  Next  'now go into a secondloop, this time calling the  FindNextChangeNotification API,  'exitingif watchStatus indicates the terminate flag was set -  for this democode  'this is an infinite loop for processing changes but final codewill  have an event to  'set terminate flag when a request to ceasemonitoring is received  Do While TerminateFlag = False  'write newmodified date of changed file to ini file   cIni.WriteValue changedfile,“Lastwrite”, newdate  'reset handle with previously signalled change &resume watch wait  state   WatchStatus = WatchResume(WatchStatus,hWatched, 100)  '(perform actions) for detected change   Set RootFolder= fso.GetFolder(FolderArray(WatchStatus))   Set FilesCollection =RootFolder.Files   For Each File In FilesCollection  'check current filelast modified date against stored date to find  changed file  cIniReturn = cIni.ReadValue(FolderArray(WatchStatus) & “\” & File.Name, _(—)   “Lastwrite”, cIniData)   If cIniData <>File.DateLastModified Then    newdate = cIniData   'Modified File hasbeen found store path & open socket    cIniReturn =cIni.ReadValue(FolderArray(WatchStatus) & “\” & File.Name, _(—)   “FilePath”, cIniData)    changedfile = cIniData   'sckConnect is awinsock control object    sckConnect.Connect   'code will then jump toconnect event and send data of changed   file to beacon   sckConnect.Close   End If  Loop End Sub Private FunctionWatchCreate(lpPathName As String, flags As Long) As Long  'CallsFindFirstChangeNotification to return a change monitoring  handle  'onthe specified directory path specified for the change event  set by the 'FILE NOTIFY FLAG   Dim WatchSubTree As Long   WatchSubTree = 0 'FindFirstChangeNotification members:  '  ' lpPathName: folder to watch ' WatchSubTree:  ' True (1) = watch specified folder and its subfolders  ' False (0) = watch the specified folder only  ' flags:FILE_NOTIFY_flag to apply   WatchCreate =FindFirstChangeNotification(lpPathName,   WatchSubTree, flags) EndFunction Private Function WatchDirectory(ArrayLen As Long, HandleArray() As Long, interval As Long) As Long  'Sets up wait state on handlearray using WaitForMultipleObjects  (returns array index of  'handlesignaling change)  'ArrayLen - Length of Handle Array  'HandleArray(0)actually passes pointer to entire HandleArray into WaitForMultipleObjects  'False - means wait state should not wait forall handles to signal  a change so it will return  'on 1 changeinterval - wait state interval, would be set to infinite  in a multithreaded  'implementation   Dim r As Long   r = WAIT_TIMEOUT   Do Whiler = WAIT_TIMEOUT And TerminateFlag = False   r =WaitForMultipleObjects(ArrayLen, HandleArray(0) , False, interval)  DoEvents   Loop   WatchDirectory = r End Function Private FunctionWatchResuxne(Index As Long, HandleArray( ) As Long, interval) As Long 'Resets triggered directory handle using FindNextChangeNotification 'and then calls waitForMultipleObjectst to wait for next event trigger  Call FindNextChangeNotification (HandleArray(Index))   Dim r As Long  r = WAIT_TIMEOUT   Do While r = WAIT_TIMEOUT And TerminateFlag = False  r = WaitForMultipleObjects(UBound(HandleArray) + 1, HandleArray(0),False, interval)   DoEvents   Loop  WatchResume = r End FunctionFunction FindDirectories(fPath As String) As String( )  'This procedureruns through all of the directories  'in the watched path using arecursive call to build  'an array of all the watched directories   Dimfso, RootFolder, Folder, FolderCollection, i   Dim FolderArray( ) AsString   Dim TempFolderArray( ) As String   ReDim FolderArray(0)   Setfso = CreateObject (“Scripting.FileSystemObject”)   Set RootFolder =fso.GetFolder(fPath)   Set FolderCollection = RootFolder.SubFolders  For Each Folder In FolderCollection   FolderArray(UBound(FolderArray)) = Folder.Path    ReDim PreserveFolderArray(UBound(FolderArray) + 1)    TempFolderArray =FindDirectories(Folder.Path)    If Not TempFolderArray(0) = “” Then    For i = 0 To UBound(TempFolderArray)     FolderArray(UBound(FolderArray)) = TempFolderArray(i)      ReDimPreserve FolderArray(UBound(FolderArray) + 1)     Next    End If   Next  If UBound(FolderArray) > 0 Then    ReDim PreserveFolderArray(UBound(FolderArray) − 1)   End If   FindDirectories =FolderArray End Function Private Sub sckConnect_Connect( )  'Sends datadown cache socket to update cache server   sckConnect.SendData 'data tosend to cache server goes here e.g. http push of file  'file path mustbe passed in End Sub

1. A file server for retrieving and transmitting files in response toreceived requests, in a communications network including a data serverand a data distribution system located between the data server and thefile server, the file server comprising: i) a request input forreceiving file requests from client equipment; ii) a request monitoringmeans for monitoring received file requests; iii) a subscription requestoutput for requesting future automatic file updates; iv) file retrievalmeans for retrieving a file identified in a received file request fromthe data server and transmitting it to the client equipment making therequest; and v) a cache for storing local copies of files for which filerequests have been received; wherein the request monitoring means isarranged to monitor received file requests, and, in the event of apredetermined condition being met for a file identified by at least onerequest, to trigger the subscription request output to output asubscription request with an associated identifier for the identifiedfile to the data distribution system, wherein the subscription requestcauses the data distribution system to thereafter automatically forwardto the file server updates for the identified file that have been pushedto the data distribution system from the data server when the identifierassociated with the subscription request is determined by the datadistribution system to correspond to an identifier associated with thefile server updates for the identified file that have been pushed to thedata distribution system.
 2. A file server as in claim 1 wherein thepredetermined condition comprises a threshold number of requests for theidentified file.
 3. A file server as in claim 1 wherein thepredetermined condition comprises a threshold rate of requests for theidentified file.
 4. A method of providing updated files in response tofile requests in a data access system, the data access system comprisinga file server, a data server and a data distribution system, the datadistribution system being arranged between the data server and the fileserver, the method comprising: i) detecting updates to one or more filesstored at the data server; ii) pushing, when an update to a file hasbeen detected, an updated file and an associated identifier from thedata server to the data distribution system; iii) receiving a requestfor a file from client equipment at the file server, and if apredetermined condition is met by the request, sending by the fileserver to the data distribution system a subscription request for futureautomatic updates to the file and an associated identifier; iv)thereafter automatically sending the updated file from the datadistribution system to the file server requesting the update if the datadistribution system determines that the identifier associated theupdated file corresponds to the identifier associated with thesubscription request; and v) storing at the file server a copy of thefile requested from the data distribution system.
 5. A method as inclaim 4 further comprising the step of deleting an existing stored copyof the file requested when a new version of the file requested isreceived at the file server, and storing the new version of the file atthe file server.
 6. A method as in claim 4, wherein the datadistribution system does not forward any file updates that are notsubscribed to by the file server.
 7. A method as in claim 6, wherein thefile server generates and sends an unsubscribed message to the datadistribution system to stop the data distribution system from forwardingany file server updates to the file server.
 8. A method as in claim 4,wherein if the file requested by the client equipment is not alreadystored in a cache of the file server, then the file server forwards afile request directly to the data server to forward the file requestedfrom the data server to the client equipment before the file serveroutputs the subscription request.
 9. A file server as in claim 1,wherein the cache is arranged to delete an existing stored copy of theidentified file when a new version of the identified file is received atthe file server, and storing the new version of the identified file inthe cache.
 10. A file server as in claim 1, wherein the datadistribution system is arranged to not forward any file updates that arenot subscribed to by the file server.
 11. A file server as in claim 10,wherein the file server is arranged to generate and send an unsubscribemessage to the data distribution system to stop the data distributionsystem from forwarding any file updates to the file server.
 12. A dataaccess system for providing updated files in response to file requests,the data access system comprising: a source file server arranged tostore one or more files and to detect updates to the one or more files;a proxy server including a cache for storing a local copy of the one ormore files; and a data distribution system located in operation betweenthe source file server and the proxy server; wherein the source fileserver pushes an updated file including an identifier to the datadistribution system upon detection of updates to the one or more files;the proxy server receives a request for a file from a client terminal,and if a predetermined condition is met by the request, sends to thedata distribution system a subscription request for future automaticupdates to the file, the subscription request including an identifier;and the data distribution system determines whether or not theidentifier of the updated file and the identifier of the subscriptionrequest correspond to each other and automatically sends the updatedfile to the proxy server requesting updates to the file based on thedetermination.
 13. A data access system as in claim 12 wherein thepredetermined condition comprises a threshold number of requests for theidentified file.
 14. A data access system as in claim 12 wherein thepredetermined condition comprises a threshold rate of requests for theidentified file.
 15. A data access system as in claim 12 wherein theproxy server sends an unsubscribe message to the data distributionsystem to stop the data distribution system from forwarding any fileupdates to the proxy server when that file is deleted from a cache ofthe proxy server.
 16. A method of operating a data distribution systemwhich is operatively arranged between a data server for storing one ormore files and a proxy server for storing local copies of the one ormore files, the method comprising: operatively arranging the datadistribution system between the proxy server and the data server;receiving, from the proxy server, a request for a file a subscriptionrequest for future automatic updates to a file, the subscription requestincluding an identifier; receiving an updated file, including anidentifier, which has been pushed from the data server based upon thedata server detecting an update to the file; determining whether theidentifier of the subscription request and the identifier of the updatedfile correspond to each other; automatically sending the updated filereceived from the data server to the proxy server requesting the updatebased on the determination that the identifier of the subscriptionrequest and the identifier of the updated file correspond to each other.17. A method as in claim 16 wherein the subscription request is providedby the proxy server to the data distribution system as a result of apredetermined condition being satisfied, the predetermined conditioncomprising a threshold number of requests for the identified file.
 18. Amethod as in claim 16 wherein the subscription request is provided bythe proxy server to the data distribution system as a result of apredetermined condition being satisfied, the predetermined conditioncomprising a threshold rate of requests for the identified file.